package com.CodeBlock代码块;

public class 重点_优先级 {
    /**静态优先级  > 普通  >构造器   (先执行静态的再执行普通的  最后再执行构造器)
     *静态代码块和静态属性的优先级是一样的；
     * 如果静态属性在前面会优先执行；
     * 优先级一样谁在前面谁先执行
     */
    public static void main(String[] args) {
        AAA a = new AAA();//（1）"AAA的静态方法01"，"AAA的静态代码块01"，"AAA的普通代码块02"，"AAA的静态方法02"，"AAA的构造器"

        //因为静态优先级高于普通
        //1. 静态属性和代码块优先级一样，因为static int n1 = getNum()在前面，所以先执行了static int n1 = getNum()
        // 先输出"AAA的静态方法"
        //再执行静态代码块，输出 “AAA的静态代码块"

        //2.静态完后，再执行普通代码块和普通属性
        //因为普通代码块与普通属性的优先级都是普通优先级，
        //因为普通代码块在前面，
        // 所以先执行了普通代码块，再执行普通属性

        //3.最后再执行构造器
        //输出"AAA的构造器"
    }
}

class AAA{
     {
        System.out.println("AAA的普通代码块02");
    }
    public  int n2 = getNum2(); //普通属性
    public  int getNum2(){
        System.out.println("AAA的静态方法02");
        return 200;
    }


    public static int n1 = getNum1();//调用getNum()方法赋值

    static {
        System.out.println("AAA的静态代码块01");
    }

    public static int getNum1(){
        System.out.println("AAA的静态方法01");
        return 100;
    }

    public AAA(){
        System.out.println("AAA的构造器");
    }
}